difference implementation